package com.by.common.core.controller;

import com.by.common.core.bean.ResultBean;
import com.by.common.core.exception.ValidateException;
import com.by.common.core.utils.ResultStatus;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BaseController {

    /**
     * 响应成功
     *
     * @param msg 消息描述
     * @return
     */
    protected ResultBean success(String msg) {
        return handler(ResultStatus.SUCCESS, msg, null);
    }

    /**
     * 响应成功
     *
     * @param msg  消息描述
     * @param data 接口数据
     * @return
     */
    protected ResultBean success(String msg,Object data){
        return handler(ResultStatus.SUCCESS, msg, data);
    }

    /**
     * 失败响应
     *
     * @param msg 失败的消息描述
     * @return
     */
    protected ResultBean fail(String msg) {
        return handler(ResultStatus.FAIL, msg, null);
    }

    /**
     * 失败响应
     *
     * @param msg  失败的消息描述
     * @param data 错误消息详情
     * @return
     */
    protected ResultBean fail(String msg, Object data) {
        return handler(ResultStatus.FAIL, msg, data);
    }

    protected ResultBean saveResult(int rs) {
        return rs>0?success("保存成功"):fail("保存失败");
    }

    protected ResultBean updateResult(int rs) {
        return rs>0?success("修改成功"):fail("修改失败");
    }

    protected ResultBean deleteResult(int rs) {
        return rs>0?success("删除成功"):fail("删除失败");
    }

    /**
     * 后端校验
     * @param result
     */
    protected void validate(BindingResult result) {
        //获取错误字段信息
        List<FieldError> list = result.getFieldErrors();
        if (null != list && list.size() > 0) {
            Map error = new HashMap(); //存储错误字段
            list.forEach(f->{
                error.put(f.getField(), f.getDefaultMessage());
            });
            throw new ValidateException(error);
        }
    }


    ResultBean handler(ResultStatus status, String msg, Object data) {
        return new ResultBean<>(status.getCode(), msg, data);
    }
}
